package com.app.mbeans.catalogo;

import java.io.Serializable;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.ListDataModel;
import com.app.mbeans.CatalogoAbstractoBean;
import com.app.modelo.Usuario;
import com.core.app.ExcepcionAplicacion;
import com.core.app.modelo.Entidad;
import com.modelo.datos.app.Permiso;
import com.modelo.datos.app.UsuarioSistema;
import com.modelo.datos.app.UsuarioSistema_Permiso;
import com.objetos.transf.datos.app.catalogo.ConsultarCatalagoRespuesta;
import com.objetos.transf.datos.app.catalogo.ConsultarCatalogoPeticion;
import com.servicios.excepcion.ExcepcionServicioFachada;

@ViewScoped
@ManagedBean(name="catalogoUsuarioSistemaPermisoBean")
public class CatalogoUsuarioSistemaPermisoBean extends CatalogoAbstractoBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private UsuarioSistema_Permiso usuarioSistema_Permiso;
	private List<UsuarioSistema> listaUsuarioSistema;
	private List<Permiso> listaPermiso;
	private String password;
	private String conPassword;
	private Boolean mostrarPassword;
	
	
	public Boolean getMostrarPassword() {
		return mostrarPassword;
	}

	public void setMostrarPassword(Boolean mostrarPassword) {
		this.mostrarPassword = mostrarPassword;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getConPassword() {
		return conPassword;
	}

	public void setConPassword(String conPassword) {
		this.conPassword = conPassword;
	}

	public UsuarioSistema_Permiso getUsuarioSistema_Permiso() {
		return usuarioSistema_Permiso;
	}

	public void setUsuarioSistema_Permiso(
			UsuarioSistema_Permiso usuarioSistema_Permiso) {
		this.usuarioSistema_Permiso = usuarioSistema_Permiso;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public List<UsuarioSistema> getListaUsuarioSistema() {
		return listaUsuarioSistema;
	}

	public void setListaUsuarioSistema(List<UsuarioSistema> listaUsuarioSistema) {
		this.listaUsuarioSistema = listaUsuarioSistema;
	}

	public List<Permiso> getListaPermiso() {
		return listaPermiso;
	}

	public void setListaPermiso(List<Permiso> listaPermiso) {
		this.listaPermiso = listaPermiso;
	}

	@Override
	protected ListDataModel<? extends Entidad> consultarEntidad(Entidad entidad)
			throws ExcepcionAplicacion {
		System.out.println("Entrando a consultarEntidad****************************************");
		
		if(entidad != null){
			System.out.println("Entidad no null");
			ConsultarCatalogoPeticion peticion = new ConsultarCatalogoPeticion();
		
			if(entidad instanceof UsuarioSistema ){
				System.out.println("es usuariosistema");
				//peticion.setOrderByAsc("UsuarioSistema.idUsuarioSistema");
				
			}
			peticion.setEntidad(entidad);
			peticion.setClase(entidad.getClass());
			
		 	//System.out.println("informacion a buscar -> " +  getCatalogo().getEntidad() );
			ConsultarCatalagoRespuesta respuesta = null;
			try {		
			
				System.out.println("antes de consultarCatalogo");
				respuesta = getfCatalogo().consultarCatalogo(peticion);
				System.out.println("despues de consultarCatalogo");
			
				// 		getCatalogo().setDescripcion(respaldoDescripcion);	
				// System.out.println("respuesta -> " + respuesta);
			
			} catch (ExcepcionServicioFachada e) {
				//throw new ExcepcionAplicacion("Ocurrio un problema al ejecutar el metodo consultarEntidad del bean CatalogoBean.-" + e.getMessage(), e.getCause());
			e.printStackTrace();
			}
			//System.out.println("+++++++++++++++++++++++++++++tamaño lista "+respuesta.getListaEntidades().getRowCount());
			return respuesta== null? null:respuesta.getListaEntidades();
		}else 
			return null;
	}

	@Override
	protected void ligarEntidad() {
		
		setUsuarioSistema_Permiso(new UsuarioSistema_Permiso());
		
		getUsuarioSistema_Permiso().setUsuarioSistema(new UsuarioSistema());
		getUsuarioSistema_Permiso().setPermiso(new Permiso());
		setEntidad( getUsuarioSistema_Permiso() );
		
	}

	

	@Override
	protected void cargarSubCatalogos() throws ExcepcionAplicacion {
		//UsuarioSistema usuarioSistema =new UsuarioSistema();
		//Permiso permiso =new Permiso();
	
		listaUsuarioSistema = (List<UsuarioSistema>) consultarEntidad(new UsuarioSistema()).getWrappedData();
		
		listaPermiso = (List<Permiso>) consultarEntidad(new Permiso()).getWrappedData();
		
	}

	@Override
	protected boolean validarCampos(Entidad entidad) {
		System.out.println("ValidarCampos");
		Boolean mostrarMensaje=false;
		
		if(usuarioSistema_Permiso.getUsuarioSistema().getIdUsuarioSistema()==0){
			FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
					FacesMessage.SEVERITY_WARN ,"Info:","Debe de seleccionar el Usuario Sistema"));
			mostrarMensaje=true;
		}
		if(usuarioSistema_Permiso.getPermiso().getIdCatalogo()==0){
			FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
					FacesMessage.SEVERITY_WARN ,"Info:","Debe de seleccionar el Permiso"));
			mostrarMensaje=true;
		}
		
		if( getConPassword()!=null && usuarioSistema_Permiso.getPassword()!=null){
			
			if( !getConPassword().equals("") && !usuarioSistema_Permiso.getPassword().equals("")){
				
				if( !getConPassword().equals( usuarioSistema_Permiso.getPassword() ) ){
					FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
							FacesMessage.SEVERITY_WARN ,"Info:","El password debe de ser el mismo"));
					mostrarMensaje=true;
				}
			}else{
				FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
						FacesMessage.SEVERITY_WARN ,"Info:","El password no debe de estar Vacio"));
				mostrarMensaje=true;
			}
			
		}else{
			FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
					FacesMessage.SEVERITY_WARN ,"Info:","El password no debe de estar Vacio"));
			mostrarMensaje=true;
		}
		
		
		if(mostrarMensaje){
			return false;
		}else{
			return true;
		}
		
	}

	@Override
	protected boolean validarExistente(Entidad entidad) {
		System.out.println("valiarExistente");
		
		boolean resultado = false;
	
		for(Object entidad2 : getModelo()){
			if( ((UsuarioSistema_Permiso)entidad2).getUsuarioSistema().getIdUsuarioSistema().equals(usuarioSistema_Permiso.getUsuarioSistema().getIdUsuarioSistema())
				&&	
				((UsuarioSistema_Permiso)entidad2).getPermiso().getIdPermiso().equals(usuarioSistema_Permiso.getPermiso().getIdPermiso() ) ){
		
				resultado = true;
				System.out.println("existe ya concepto");
				break;
			}
		}
		
		if(resultado)
			FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
					FacesMessage.SEVERITY_WARN ,"Info:","El Permiso ya esta insertado para este usuario"));
		return resultado;
	}

	@Override
	protected boolean validarExistenteActualizar(Entidad entidad) {
		System.out.println("valiarExistenteActualizar");
		
		boolean resultado = false;
		Integer numerosId = 0;
	
		for(Object entidad2 : getModelo()){
			if( ((UsuarioSistema_Permiso)entidad2).getUsuarioSistema().getIdUsuarioSistema().equals(usuarioSistema_Permiso.getUsuarioSistema().getIdUsuarioSistema())
				&&	
				((UsuarioSistema_Permiso)entidad2).getPermiso().getIdPermiso().equals(usuarioSistema_Permiso.getPermiso().getIdPermiso() ) ){
				numerosId++;
				System.out.println("existe ya concepto");
			}
		}
		
		if(numerosId==1){
			resultado = false;		
		}
		if(numerosId>=2){
			FacesContext.getCurrentInstance().addMessage("catMensajes", new FacesMessage(
					FacesMessage.SEVERITY_WARN ,"Info:","Ya existe el Persmiso para el Usuario"));

			resultado=true;
		}
		
		return resultado;
		
	}

	@Override
	protected void inicilizarEntidad() {
		//UsuarioSistema usuarioSistema = new UsuarioSistema();
		//usuarioSistema.setIdUsuarioSistema(0);
		Permiso permiso =new Permiso();
		permiso.setIdPermiso(0);
		UsuarioSistema usuarioSistema=new UsuarioSistema();
		usuarioSistema.setIdUsuarioSistema(0);
		usuarioSistema_Permiso.setUsuarioSistema(usuarioSistema);
		usuarioSistema_Permiso.setPermiso(permiso);
		usuarioSistema_Permiso=null;
		setPassword(null);
		setConPassword(null);
		permiso=null;
		usuarioSistema=null;
		setMostrarPassword(false);
		
		try {
			cargar();
		} catch (ExcepcionAplicacion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void buscarCatalogo()throws ExcepcionAplicacion{
		System.out.println("Buscar catalogo");
		try{

			usuarioSistema_Permiso.getUsuarioSistema().setId(usuarioSistema_Permiso.getUsuarioSistema().getIdUsuarioSistema());
			usuarioSistema_Permiso.getPermiso().setId(usuarioSistema_Permiso.getPermiso().getIdPermiso());
			
			if(usuarioSistema_Permiso.getUsuarioSistema().getIdUsuarioSistema()==0){
				usuarioSistema_Permiso.setUsuarioSistema(new UsuarioSistema());
			}
			if(usuarioSistema_Permiso.getPermiso().getIdPermiso()==0){
				usuarioSistema_Permiso.setPermiso(new Permiso());
			}
			if(usuarioSistema_Permiso.getPassword().equals("")){
				usuarioSistema_Permiso.setPassword(null);
			}
			
			super.setModelo(consultarEntidad(usuarioSistema_Permiso));
		}catch(NullPointerException e){
			e.printStackTrace();
			
		}
	}


	public void eliminarCatalogo(ActionEvent e)throws ExcepcionAplicacion{		
		eliminarEntidad();		
		setEntidad(new UsuarioSistema_Permiso());
		consultarCatalogo(null);
		
		setAccionActualizar(!false);
		setAccionRegistrar(!true);
		setAccionBuscar(!true);
	}
	
	public void seleccionarCatalogo(ActionEvent evento)throws ExcepcionAplicacion{
		System.out.println("Seleccionar catalogo tarifa");
	     super.seleccionarCatalogo(null);
	     
	     this.usuarioSistema_Permiso = (UsuarioSistema_Permiso)getEntidad();
	     conPassword=usuarioSistema_Permiso.getPassword();
	}
	
}
